// 控制路由跳转，通过路由守卫，每次路由跳转都要经过方法

import router from './router'
import store from './store'

// 前置路由守卫，每一次跳转页面都要经过这里
router.beforeEach(async(to, from, next) => {
  // 白名单，直接访问
  if (['/login', '/learn-comp', '/404'].includes(to.path)) {
    return next()
  }
  // 如果有token才能访问
  if (store.state.user.token) {
    // 在路由守卫中，判断有无用户信息，没有就获取用户信息
    if (!store.state.user.userInfo.userId) {
      /* ==============================⭐  ==============================*/
      /* // await store.dispatch('user/getUserInfo')
      const { roles: { menus }} = await store.dispatch('user/getUserInfo')
      console.log(menus)

      const filterRoutes = asyncRoutes.filter(t => menus.includes(t.children[0].name))
      console.log(filterRoutes)
      // 通过addRoutes方法添加路由配置，不会立即生效，需要下次跳转才生效
      router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
      // 解决菜单显示不出来
      // 通过扩展运算符合并数组重新赋值避免push操作不停添加

      router.options.routes = [...constantRoutes, ...filterRoutes]
      // 解决刷新动态路由的页面404
      return next(to.path)
      */
      /* ==============================⭐  ==============================*/
      const { roles: { menus }} = await store.dispatch('user/getUserInfo')
      const filterRoutes = await store.dispatch('permission/filterRoutes', menus)
      router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
      // 解决菜单显示不出来
      // 通过扩展运算符合并数组重新赋值避免push操作不停添加
      // router.options.routes = [...constantRoutes, ...filterRoutes]
      // 解决刷新动态路由的页面404
      return next(to.path)
    }
    next()
  } else {
    next('/login')
  }
})
// 后置守卫，每次跳转后要经过这里
router.afterEach((to, from, next) => {

})

